{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import random\n",
    "import sys\n",
    "import warnings\n",
    "\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "from sklearn.metrics import roc_auc_score\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "warnings.filterwarnings('ignore')\n",
    "\n",
    "from deap import base\n",
    "from deap import creator\n",
    "from deap import tools\n",
    "from deap import algorithms"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'2.7.15 (default, Nov 16 2018, 23:13:11) \\n[GCC 6.3.0 20170516]'"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sys.version"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Read and preprocess data files"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_all = pd.read_csv('./data/data_all.csv')\n",
    "df_all.fillna(0, inplace=True)\n",
    "df_all.Calcs1.replace(0, 'None', inplace=True)\n",
    "\n",
    "df_test = pd.read_csv('./data/data_test.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "categorical_features = ['Composition', 'Echogenicity', 'Shape', 'Calcs1', 'Calcs2', 'Calcs3', 'MargA']\n",
    "df_all_categorical = df_all[categorical_features]\n",
    "df_all_categorical = pd.get_dummies(df_all_categorical)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Index([u'Composition_Cannot tell', u'Composition_Cystic',\n",
      "       u'Composition_Entirely or almost entirely solid',\n",
      "       u'Composition_Mixed cystic_solid', u'Composition_Spongiform',\n",
      "       u'Echogenicity_Cant classify', u'Echogenicity_Hyper',\n",
      "       u'Echogenicity_Iso', u'Echogenicity_Mild Hypo',\n",
      "       u'Echogenicity_Very Hypo', u'Shape_n', u'Shape_y',\n",
      "       u'MargA_Cant classify', u'MargA_Ill-defined', u'MargA_Lobulated',\n",
      "       u'MargA_Well-defined', u'Calcs_None', u'Calcs_Peripheral_eggshell',\n",
      "       u'Calcs_Colloid', u'Calcs_Macro', u'Calcs_PEF'],\n",
      "      dtype='object')\n"
     ]
    }
   ],
   "source": [
    "df_features = df_all_categorical\n",
    "df_features['Calcs_None'] = df_features.Calcs1_None\n",
    "df_features['Calcs_Peripheral_eggshell'] = df_features.Calcs1_Peripheral_eggshell + df_features.Calcs2_Peripheral_eggshell + df_features.Calcs3_Peripheral_eggshell\n",
    "df_features['Calcs_Colloid'] = df_features.Calcs1_Colloid + df_features.Calcs2_Colloid\n",
    "df_features['Calcs_Macro'] = df_features.Calcs1_Macro + df_features.Calcs2_Macro\n",
    "df_features['Calcs_PEF'] = df_features.Calcs1_PEF + df_features.Calcs2_PEF\n",
    "df_features.drop(columns=['Calcs1_None', 'Calcs2_0', 'Calcs3_0'], inplace=True)\n",
    "df_features.drop(columns=['Calcs1_Peripheral_eggshell', 'Calcs2_Peripheral_eggshell', 'Calcs3_Peripheral_eggshell'], inplace=True)\n",
    "df_features.drop(columns=['Calcs1_Colloid', 'Calcs2_Colloid'], inplace=True)\n",
    "df_features.drop(columns=['Calcs1_Macro', 'Calcs2_Macro'], inplace=True)\n",
    "df_features.drop(columns=['Calcs1_PEF', 'Calcs2_PEF'], inplace=True)\n",
    "print(df_features.columns)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Remove test cases"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_features['ID'] = df_all['ID']\n",
    "test_ids = df_test['ID'].as_matrix()\n",
    "df_features = df_features[~df_features.ID.isin(test_ids)]\n",
    "df_features.drop(columns=['ID'], inplace=True)\n",
    "df_train = df_all[~df_all.ID.isin(test_ids)]\n",
    "\n",
    "y_true_train = df_train.Cancer"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### ROC AUC loss function"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "def tirads_auc_loss(w):\n",
    "    # Add 0 points for cystic and spongiform features which are not optimized\n",
    "    w = np.array([w[:1] + [0] + w[1:3] + [0] + w[3:]])\n",
    "    \n",
    "    X = df_features.as_matrix()\n",
    "    \n",
    "    # Give 0 total points for all cystic and spongiform nodules\n",
    "    x_cyst = X[:, 1]\n",
    "    x_cyst = np.abs(x_cyst - 1)\n",
    "    x_spon = X[:, 4]\n",
    "    x_spon = np.abs(x_spon - 1)\n",
    "    \n",
    "    X = X * np.expand_dims(x_cyst, axis=-1)\n",
    "    X = X * np.expand_dims(x_spon, axis=-1)\n",
    "    \n",
    "    # Compute AI TI-RADS points\n",
    "    ai_tirads_points = np.dot(X, w.T).flatten()\n",
    "    \n",
    "    return roc_auc_score(y_true_train, ai_tirads_points),"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Optimization with genetic algorithm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "gen\tnevals\tavg     \tstd        \tmin     \tmax     \n",
      "0  \t100   \t0.790689\t1.11022e-16\t0.790689\t0.790689\n",
      "1  \t61    \t0.788603\t0.00686814 \t0.753779\t0.799356\n",
      "2  \t52    \t0.789393\t0.00931068 \t0.735427\t0.799356\n",
      "3  \t57    \t0.791771\t0.00707812 \t0.744292\t0.800126\n",
      "4  \t53    \t0.794067\t0.00924903 \t0.736318\t0.800354\n",
      "5  \t66    \t0.797745\t0.00747112 \t0.740854\t0.800126\n",
      "6  \t69    \t0.797692\t0.00846417 \t0.74804 \t0.803301\n",
      "7  \t57    \t0.798974\t0.00789054 \t0.727972\t0.803301\n",
      "8  \t69    \t0.799435\t0.00520969 \t0.762078\t0.804198\n",
      "9  \t49    \t0.797177\t0.0278486  \t0.526802\t0.804198\n",
      "10 \t52    \t0.801239\t0.00815886 \t0.738689\t0.804578\n",
      "11 \t61    \t0.802291\t0.00938045 \t0.73688 \t0.811084\n",
      "12 \t65    \t0.803632\t0.00362015 \t0.779922\t0.811084\n",
      "13 \t61    \t0.801956\t0.0186953  \t0.639134\t0.812086\n",
      "14 \t53    \t0.80593 \t0.00877791 \t0.75888 \t0.812936\n",
      "15 \t59    \t0.809477\t0.00605853 \t0.762888\t0.812936\n",
      "16 \t73    \t0.81122 \t0.00387464 \t0.782427\t0.814411\n",
      "17 \t53    \t0.811942\t0.00394484 \t0.774381\t0.814411\n",
      "18 \t65    \t0.810835\t0.0104757  \t0.723309\t0.814411\n",
      "19 \t57    \t0.811406\t0.0122515  \t0.703381\t0.814411\n",
      "20 \t67    \t0.811918\t0.00753381 \t0.760661\t0.814816\n",
      "21 \t55    \t0.811523\t0.0120723  \t0.721247\t0.814816\n",
      "22 \t55    \t0.814008\t0.00323863 \t0.784708\t0.81532 \n",
      "23 \t56    \t0.813201\t0.00742628 \t0.762322\t0.81532 \n",
      "24 \t58    \t0.813084\t0.00675973 \t0.774059\t0.81532 \n",
      "25 \t69    \t0.814447\t0.00381235 \t0.778735\t0.81532 \n",
      "26 \t67    \t0.814056\t0.00545308 \t0.782318\t0.81532 \n",
      "27 \t41    \t0.815048\t0.00163062 \t0.802135\t0.81532 \n",
      "28 \t75    \t0.814445\t0.00526708 \t0.771001\t0.817348\n",
      "29 \t61    \t0.814199\t0.00590655 \t0.765652\t0.817348\n",
      "30 \t65    \t0.814071\t0.00854119 \t0.744264\t0.817348\n",
      "31 \t60    \t0.814585\t0.00782339 \t0.755145\t0.81758 \n",
      "32 \t57    \t0.816159\t0.00489074 \t0.777108\t0.81758 \n",
      "33 \t62    \t0.816944\t0.00177981 \t0.8072  \t0.81758 \n",
      "34 \t54    \t0.816393\t0.0038953  \t0.791511\t0.81758 \n",
      "35 \t59    \t0.816082\t0.00572469 \t0.783116\t0.817654\n",
      "36 \t59    \t0.816278\t0.00637853 \t0.769072\t0.818539\n",
      "37 \t64    \t0.816093\t0.006415   \t0.770287\t0.818539\n",
      "38 \t61    \t0.816824\t0.00469568 \t0.773645\t0.818539\n",
      "39 \t60    \t0.816997\t0.00368636 \t0.796922\t0.818539\n",
      "40 \t60    \t0.817299\t0.00709742 \t0.749518\t0.818539\n",
      "41 \t74    \t0.817546\t0.00501367 \t0.782253\t0.818576\n",
      "42 \t69    \t0.817356\t0.00533887 \t0.773744\t0.818576\n",
      "43 \t49    \t0.818073\t0.00268311 \t0.794996\t0.818576\n",
      "44 \t55    \t0.817395\t0.00483331 \t0.786304\t0.818576\n",
      "45 \t64    \t0.816814\t0.00770311 \t0.759589\t0.818576\n",
      "46 \t58    \t0.81583 \t0.00964899 \t0.760862\t0.818576\n",
      "47 \t56    \t0.818327\t0.00122224 \t0.808672\t0.818613\n",
      "48 \t61    \t0.817302\t0.00621604 \t0.761809\t0.818613\n",
      "49 \t80    \t0.816959\t0.00581417 \t0.780689\t0.818613\n",
      "50 \t61    \t0.817407\t0.00507394 \t0.780479\t0.818613\n"
     ]
    }
   ],
   "source": [
    "# Number of indiviguals in population\n",
    "population_count = 100\n",
    "\n",
    "# Maximize loss function (ROC AUC)\n",
    "creator.create(\"FitnessMax\", base.Fitness, weights=(1.0,))\n",
    "creator.create(\"Individual\", list, fitness=creator.FitnessMax)\n",
    "\n",
    "def initIndividual(icls, content):\n",
    "    return icls(content)\n",
    "\n",
    "# All individuals in initial population are ACR TI-RADS\n",
    "def initPopulation(pcls, ind_init, initial_state):\n",
    "    return [pcls(ind_init(eval(initial_state)))] * population_count\n",
    "\n",
    "toolbox = base.Toolbox()\n",
    "# Attribute generator\n",
    "toolbox.register(\"attr_int\", random.randint, 0, 3)\n",
    "# Structure initializers\n",
    "toolbox.register(\"individual_guess\", initIndividual, creator.Individual)\n",
    "# Individual is a list of 19 integers corresponding to ACR TI-RADS features\n",
    "# excluding cyctic and spongiform (which are not optimized)\n",
    "# and anechoich and extra-thyroidal extension (which are not available)\n",
    "toolbox.register(\"individual\", tools.initRepeat, creator.Individual, toolbox.attr_int, 19)\n",
    "initial_state = '[2, 2, 1, 1, 1, 1, 2, 3, 0, 3, 0, 0, 2, 0, 0, 2, 0, 1, 3]'\n",
    "toolbox.register(\"population_guess\", initPopulation, list, toolbox.individual_guess, initial_state)\n",
    "toolbox.register(\"population\", tools.initRepeat, list, toolbox.individual)\n",
    "\n",
    "# Hyperparameters of genetic algorithm and optimization constraints\n",
    "toolbox.register(\"evaluate\", tirads_auc_loss)\n",
    "toolbox.register(\"mate\", tools.cxTwoPoint)\n",
    "toolbox.register(\"mutate\", tools.mutUniformInt, low=0, up=3, indpb=0.05)\n",
    "toolbox.register(\"select\", tools.selTournament, tournsize=4)\n",
    "\n",
    "epochs = 50\n",
    "\n",
    "# Random seed for reproducibility\n",
    "random.seed(0)\n",
    "\n",
    "hof = tools.HallOfFame(1)\n",
    "pop = toolbox.population(n=population_count)\n",
    "\n",
    "# Initialization\n",
    "initial_state = [2, 2, 1, 1, 1, 1, 2, 3, 0, 3, 0, 0, 2, 0, 0, 2, 0, 1, 3]\n",
    "for _ in range(population_count):\n",
    "    pop.pop()\n",
    "for _ in range(population_count):\n",
    "    guess_ind = creator.Individual(initial_state)\n",
    "    pop.append(guess_ind)\n",
    "\n",
    "# Track optimization progress\n",
    "stats = tools.Statistics(lambda ind: ind.fitness.values)\n",
    "stats.register(\"avg\", np.mean)\n",
    "stats.register(\"std\", np.std)\n",
    "stats.register(\"min\", np.min)\n",
    "stats.register(\"max\", np.max)\n",
    "\n",
    "# Run optimization\n",
    "pop, log = algorithms.eaSimple(\n",
    "    pop, \n",
    "    toolbox, \n",
    "    cxpb=0.5, \n",
    "    mutpb=0.2, \n",
    "    ngen=epochs, \n",
    "    stats=stats, \n",
    "    halloffame=hof, \n",
    "    verbose=True,\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Plot optimization history"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8, 6))\n",
    "plt.plot(range(len(log)), [d['avg'] for d in log], color='blue', lw=2)\n",
    "y_max = np.array([d['avg'] + d['std'] for d in log])\n",
    "y_min = np.array([d['avg'] - d['std'] for d in log])\n",
    "plt.fill_between(range(len(log)), y_min, y_max, color='blue', alpha=0.15)\n",
    "plt.xlim([0.0, len(log)])\n",
    "plt.grid(color='silver', alpha=0.3, linestyle='--', linewidth=1)\n",
    "plt.ylabel('ROC AUC', fontsize='x-large')\n",
    "plt.xlabel('Population', fontsize='x-large')\n",
    "plt.tight_layout()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### AI TI-RADS points assigned to features"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Composition_Cannot tell : 0\n",
      "Composition_Cystic : 0\n",
      "Composition_Entirely or almost entirely solid : 3\n",
      "Composition_Mixed cystic_solid : 0\n",
      "Composition_Spongiform : 0\n",
      "Echogenicity_Cant classify : 0\n",
      "Echogenicity_Hyper : 0\n",
      "Echogenicity_Iso : 0\n",
      "Echogenicity_Mild Hypo : 2\n",
      "Echogenicity_Very Hypo : 3\n",
      "Shape_n : 0\n",
      "Shape_y : 1\n",
      "MargA_Cant classify : 0\n",
      "MargA_Ill-defined : 0\n",
      "MargA_Lobulated : 2\n",
      "MargA_Well-defined : 0\n",
      "Calcs_None : 0\n",
      "Calcs_Peripheral_eggshell : 2\n",
      "Calcs_Colloid : 0\n",
      "Calcs_Macro : 0\n",
      "Calcs_PEF : 3\n"
     ]
    }
   ],
   "source": [
    "hof = np.array(hof).flatten()\n",
    "hof = hof.tolist()\n",
    "w = np.array(hof[:1] + [0] + hof[1:3] + [0] + hof[3:])\n",
    "# Normalize points within each category\n",
    "w[0:5] = w[0:5] - np.min(w[0:5]) # composition\n",
    "w[5:10] = w[5:10] - np.min(w[5:10]) # echogenicity\n",
    "w[10:12] = w[10:12] - np.min(w[10:12]) # shape\n",
    "w[12:16] = w[12:16] - np.min(w[12:16]) # margin\n",
    "w[16:] = w[16:] - np.min(w[16:]) # echogenic foci\n",
    "# Show points\n",
    "for i in range(len(w)):\n",
    "    print('{} : {}'.format(df_features.columns[i], w[i]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.15"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
